// https://www.luogu.com.cn/record/75555838
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 21;
int n, H;

int h[N],  // 身高
    w[N],  // 体重
    s[N];  // 耐力
const int INF = 1e18;
int dp[1 << N],  // dp[S] 定义为在 S 状态下剩余的最大耐力值（最大还能扛多少重量
    ans;
signed main() {
  scanf("%lld%lld", &n, &H);
  for (int i = 0; i < n; ++i) scanf("%lld%lld%lld", &h[i], &w[i], &s[i]);

  ans = -INF;
  dp[0] = INF;                          // 当没有
  for (int S = 1; S < (1 << n); ++S) {  // 枚举状态
    dp[S] = -INF;                       // 初始化DP数组为-INF
    int now = 0;                        // 当前高度
    for (int i = 0; i < n; ++i) {
      if (S & (1 << i)) {
        dp[S] = max(dp[S],                        // 原状态
                    min(                          // 转移
                        dp[S ^ (1 << i)] - w[i],  // 假设让这头牛站在最上边
                        s[i]));  // 第 i 头牛自己能扛多少
        now += h[i];             // 牛塔又高了一截
      }
    }
    if (now >= H        // 身高达成
        && dp[S] >= 0)  // 牛还没压死（bushi
      ans = max(dp[S], ans);
  }
  if (ans < 0)
    puts("Mark is too tall");
  else
    printf("%lld\n", ans);
}
